package leetcode.weekly.week320;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import leetcode.helper.tree.TreeNode;

//Solution2Test
public class Solution5 {



	int min, max;

	public List<List<Integer>> closestNodes(TreeNode root, List<Integer> queries) {
		List<List<Integer>> ans = new ArrayList<>();
		for (int i = 0; i < queries.size(); i++) {
			int query = queries.get(i);
			min = -1;
			max = -1;
			this.f1(root, query);
			this.f2(root, query);
			ans.add(Arrays.asList(new Integer[] { min, max }));
		}
		return ans;
	}

	// mini 是树中小于等于 queries[i] 的 最大值 。如果不存在这样的值，则使用 -1 代替
	private void f1(TreeNode root, int query) {
		if (root == null) {
			return;
		}
		if (root.val == query) {
			min = root.val;
		} else if (root.val > query) {
			this.f1(root.left, query);
		} else {
			min = root.val;
			this.f1(root.right, query);
		}
	}
	//maxi 是树中大于等于 queries[i] 的 最小值 。如果不存在这样的值，则使用 -1 代替。
	private void f2(TreeNode root, int query) {
		if (root == null) {
			return;
		}
		if (root.val == query) {
			max = root.val;
		} else if (query > root.val) {
			this.f2(root.right, query);
		} else {
			max = root.val;
			this.f2(root.left, query);
		}
	}


}
